{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "# Use ZhipuAI GLM-4 Vision API to analyze the population data of American cities and rural areas\n",
    "\n",
    "**This tutorial is Only in Chinese explanation**\n",
    "\n",
    "此代码演示了使用 GLM-4V 模型对表格进行简单对分析，模型将通过思维链的方式对一个csv表格和对应的图表进行分析，并在最后绘制出对未来美国人口城乡居民比例的预测。\n",
    "我们使用来自[Our World in Data](https://ourworldindata.org/grapher/urban-vs-rural-majority?tab=chart&facet=none)的数据进行分析和预测。\n",
    "\n",
    "为了区分图像理解模型和 LLM 的区别，我们使用了对应的图像和csv表格，分别传入给 GLM-4V 和 GLM-4 模型，对比两者的结果。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "b9d2202d7ce04a48"
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "os.environ[\"ZHIPUAI_API_KEY\"] = \"your api key\""
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:36:45.486308Z",
     "start_time": "2024-01-23T07:36:45.481925Z"
    }
   },
   "id": "f03a65879fc8edb8"
  },
  {
   "cell_type": "markdown",
   "source": [
    "首先，我们需要读取图片并传入给 GLM4-V模型"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "524d71278f724da1"
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "import base64\n",
    "import io\n",
    "from zhipuai import ZhipuAI\n",
    "from PIL import Image\n",
    "\n",
    "client = ZhipuAI()\n",
    "\n",
    "def image_to_base64(image_path):\n",
    "    \"\"\"\n",
    "    Convert an image to base64 encoding.\n",
    "    \"\"\"\n",
    "    with Image.open(image_path) as image:\n",
    "        buffered = io.BytesIO()\n",
    "        image.save(buffered, format=\"PNG\")  # or format=\"PNG\", depending on your image.\n",
    "        img_str = base64.b64encode(buffered.getvalue()).decode()\n",
    "    return img_str\n",
    "\n",
    "\n",
    "base64_image = image_to_base64(\"data/urban-vs-rural-majority/urban-vs-rural-majority.png\")"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:36:46.342051Z",
     "start_time": "2024-01-23T07:36:45.486330Z"
    }
   },
   "id": "4f3135b451b85400"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [],
   "source": [
    "messages = [\n",
    "    {\n",
    "        \"role\": \"user\",\n",
    "        \"content\": [\n",
    "            {\n",
    "                \"type\": \"text\",\n",
    "                \"text\": \"你是一个人口数据分析师，请你根据我提供的数据，分析一下美国城市的人口变化\"\n",
    "            },\n",
    "            {\n",
    "                \"type\": \"image_url\",\n",
    "                \"image_url\": {\n",
    "                    \"url\": base64_image\n",
    "                }\n",
    "\n",
    "            }\n",
    "        ]\n",
    "    }\n",
    "]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:36:46.345857Z",
     "start_time": "2024-01-23T07:36:46.343059Z"
    }
   },
   "id": "7898ce8f4610930e"
  },
  {
   "cell_type": "markdown",
   "source": [
    "我们先对这张表格进行简单的分析并得到趋势。我们将模型的回答存入历史，并为接下来的绘图工作做准备。\n",
    "\n",
    "Through this operation, we will be able to get the model's description of this picture."
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "fd97d54e0506c728"
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [],
   "source": [
    "def add_message(role, messages, new_message):\n",
    "    messages.append(\n",
    "        {\n",
    "            \"role\": role,\n",
    "            \"content\": new_message\n",
    "        }\n",
    "    )\n",
    "    return messages"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:36:46.348777Z",
     "start_time": "2024-01-23T07:36:46.345792Z"
    }
   },
   "id": "a7f523eb663d0c64"
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "'从1500年到2050年，美国的总人口一直保持稳定增长。在18世纪后期和19世纪前期，随着工业革命的发展，人们从农村地区向城市迁移，导致城市人口快速增长。到1930年左右，美国的城市化率达到60%，之后城市人口增长速度放缓，但仍然保持了相对较高的增长率。然而，到了20世纪中期，随着城市化的饱和和郊区化的发展，美国城市的人口开始出现下降趋势。到1970年左右，美国城市的人口比例降至40%以下。与此同时，农村人口的比例则有所上升。尽管如此，美国的城市人口依然是世界上最大的城市人口之一，且其在科技、金融、文化等方面具有重要的影响力。'"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4v\",\n",
    "    messages=messages,\n",
    "    top_p=0.7,\n",
    "    temperature=0.9,\n",
    "    max_tokens=2000,\n",
    ")\n",
    "add_message(response.choices[0].message.role, messages, response.choices[0].message.content)\n",
    "response.choices[0].message.content"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:36:54.179747Z",
     "start_time": "2024-01-23T07:36:46.351313Z"
    }
   },
   "id": "584b816346cec5b9"
  },
  {
   "cell_type": "markdown",
   "source": [
    "接着，我们让模型完成对未来人口比例预期的绘图工作，在这里，我们使用 GLM-4V模型进行测试"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "91771dd231fc3632"
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "data": {
      "text/plain": "\"```python\\nimport matplotlib.pyplot as plt\\n\\nyears = [2051, 2052, 2053, 2054, 2055]\\nurban_ratio = [80,80.2,80.6,82,83]\\nrural_ratio = [20,19.8,19.4,18,17]\\n\\nplt.figure(figsize=(10,6))\\nplt.plot(years, urban_ratio, marker='o', label='Urban')\\nplt.plot(years, rural_ratio, marker='o', label='Rural')\\nplt.title('Do more people live in urban or rural areas? United States, 1500 to 2050')\\nplt.xlabel('Year')\\nplt.ylabel('Percentage')\\nplt.legend()\\nplt.grid(True)\\nplt.show()\\n```\""
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Prompt = \"\"\"\n",
    "请你基于图表的数据和增长趋势，作出预测未来的城乡人口比例数据并画图。2051年开始，城市人口会继续增长，但是基本不在变动，乡村人口会下降，但是与2050的数值不会有很大变化\n",
    "你应该预测2051到2055年美国的乡村和城镇人口分布比例，将预测的数据使用使用Python语言绘制，你至少应该绘制10个数据点，并且，增长率是会发生变动的，最后，你要把这些数据点连接来，成为一个图表。\n",
    "你应该使用markdown进行输出，只输出Python的执行代码。\n",
    "\"\"\"\n",
    "add_message(\"user\", messages, Prompt)\n",
    "\n",
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4v\",\n",
    "    messages=messages,\n",
    "    top_p=0.1,\n",
    "    temperature=0.1,\n",
    "    max_tokens=2000,\n",
    ")\n",
    "response.choices[0].message.content"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:37:04.868578Z",
     "start_time": "2024-01-23T07:36:54.173703Z"
    }
   },
   "id": "c7c414efa6505932"
  },
  {
   "cell_type": "markdown",
   "source": [
    "我们获取到了模型的Python代码返回并进行了提取和绘制，得到以下图像。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "9ec775f1859990de"
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [],
   "source": [
    "def execute_cleaned_code_from_string(code_string):\n",
    "    import re\n",
    "    pattern = r'```python\\n(.*?)```'\n",
    "    match = re.search(pattern, code_string, re.DOTALL)\n",
    "    if match:\n",
    "        clean_code_string = match.group(1)\n",
    "        print(\"Extracted code:\", clean_code_string)\n",
    "        try:\n",
    "            code_object = compile(clean_code_string, '<string>', 'exec')\n",
    "            exec(code_object)\n",
    "            return \"Code executed successfully.\"\n",
    "        except Exception as e:\n",
    "            return \"An error occurred: \" + str(e)\n",
    "    else:\n",
    "        return \"No Python code block found.\"\n",
    "\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:37:04.869275Z",
     "start_time": "2024-01-23T07:37:04.856890Z"
    }
   },
   "id": "c1756a3fa02d837b"
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracted code: import matplotlib.pyplot as plt\n",
      "\n",
      "years = [2051, 2052, 2053, 2054, 2055]\n",
      "urban_ratio = [80,80.2,80.6,82,83]\n",
      "rural_ratio = [20,19.8,19.4,18,17]\n",
      "\n",
      "plt.figure(figsize=(10,6))\n",
      "plt.plot(years, urban_ratio, marker='o', label='Urban')\n",
      "plt.plot(years, rural_ratio, marker='o', label='Rural')\n",
      "plt.title('Do more people live in urban or rural areas? United States, 1500 to 2050')\n",
      "plt.xlabel('Year')\n",
      "plt.ylabel('Percentage')\n",
      "plt.legend()\n",
      "plt.grid(True)\n",
      "plt.show()\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 1000x600 with 1 Axes>",
      "image/png": "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/f3336U+L8m/n1P38//xxx81aNAg1apVq8T/ALv79cUXX2jEiBGKj49XgwYNJBV/v5ivGlvP5ZNPPlnh4eH65JNPJElPPvmkOnbsqDp16igyMlLt27cvdviYP/xtr6Q+/fXXX7ruuutUr149hYeH6+STT9ZLL73ktX9ubq4efPBBtW/fXnFxcYqOjlaXLl20bNmyIsd688031b59e9WoUUOxsbFq27atnn76ac/6M844w+u/1CEhIQoNDVVubm6561Ac9/N+77331KZNG8/zcz93t8I/E40bN9YPP/ygL774wjP8yDrcy9/ff2lpaRo6dKji4uJUs2ZNDRkyRGlpaX71/bffflODBg3UqFGjIuvi4+M9X5fU1/379+vOO+9U27ZtFRMTo9jYWPXu3VvfffedZ//PP//ccwVm2LBhnjasw/dWr16tCy64QHFxcYqKilLXrl21YsUKrz4dPHhQo0ePVuPGjRUeHq74+Hj16NFD69at8+v5FpaUlCS7vWwvAQ8ePKi8vDyf6zIyMrR48WJdc801io2N9SwfPHiwYmJi9Pbbb3uWzZ8/Xw6HQzfeeKNnWUREhIYPH66VK1fqjz/+KLYP5557rv73v/9p+/btnlpaf3fs3btXw4cPV7169RQREaFTTz1Vr7zySqnPLSwsTB07diyy/NJLL5Ukr99/y5Yt0759+zRixAivbUeOHKlDhw7pf//7X5F2jDHKyMgo8rf5WNpE4DHcDgFx7bXX6v/+7//06aef6oYbbpAkffbZZ+rdu7dOOukkTZgwQYcPH9aMGTPUqVMnrVu3zq+b6idPnqzIyEjde++9+vXXXzVjxgyFhobKbrfrwIEDnqEmL7/8spKTk/Xggw969r3++uv1yiuv6PLLL9cdd9yh1atXa/Lkyfrpp5/07rvveh1n8+bNGjhwoG666SbdcMMNatGihbKystS1a1f99ddfuummm9SwYUN9/fXXGjdunHbt2uXXGOktW7boyiuv1M0336whQ4YoNTVVAwYM0CeffKIePXpIkt/HMcbo4osv1rJlyzR8+HC1a9dOixYt0l133aW//vpL06ZN8zr2F198obfeeku33XabwsPDNWvWLF1wwQX65ptv1KZNm2L7/Nprr2nIkCHq1auXpkyZoqysLM2ePVudO3fW+vXrj2kyhNDQUF166aVasGCBnnvuOYWFhXnWvffee8rJydFVV10lqWDM+MUXX6zly5frxhtvVKtWrbRx40ZNmzZNv/zyi957771y9WHu3Lk6ePCgbrrpJtlsNj3++OO67LLL9Pvvvys0NLTcz60wX+eUmz/fmzVr1ujrr7/WVVddpQYNGmjbtm2aPXu2zj33XP3444+KioryOt6tt96qWrVqafz48dq2bZumT5+uUaNG6a233iqxn2X9OR0wYICaNWumRx99tNgXAFYjRoxQ3bp19eCDD+rQoUN+Vs/b0qVL9fbbb2vUqFE64YQTPH16+umndfHFF+vqq69Wbm6u3nzzTQ0YMEAffvih+vTpU+bjlKU9X33as2ePzj77bE+YqFu3rj7++GMNHz5cGRkZnuFCGRkZevHFFzVw4EDdcMMNOnjwoObMmaNevXrpm2++8QzRWrx4sQYOHKjzzz9fU6ZMkVTw4m3FihW6/fbbfT6HGTNm6Pfff/f6XViRli9frgULFmjEiBGqUaOGnnnmGfXv3187duxQnTp1fO4zffp03XrrrYqJidF9990nSapXr56ksv3+u+SSS7R8+XLdfPPNatWqld59910NGTLEr343atRIn332mZYuXapu3boVu11Jff3999/13nvvacCAAUpOTtaePXv03HPPqWvXrvrxxx9Vv359tWrVSpMmTdKDDz6oG2+8UV26dJEkzwvypUuXqnfv3mrfvr3Gjx8vu92u1NRUdevWTV999ZXOOussSdLNN9+s+fPna9SoUWrdurX27dun5cuX66efftLpp5/u13M+FsOGDVNmZqYcDoe6dOmiJ554QmeccYZn/caNG5WXl+e1TCoIH+3atdP69es9y9avX6/mzZt7hSlJnue6YcMGJSUl+ezHfffdp/T0dP3555+ev3HuYWyHDx/Wueeeq19//VWjRo1ScnKy5s2bp6FDhyotLa3Yn5GS7N69W5J0wgknePVfUpHn2r59e9ntdq1fv17XXHON17qTTjpJmZmZio6OVr9+/fTUU095zqPytolKEMzLWDh+lTTczi0uLs6cdtppnsft2rUz8fHxZt++fZ5l3333nbHb7Wbw4MElHs99yb9NmzYmNzfXs3zgwIHGZrOZ3r17e22fkpLidTl+w4YNRpK5/vrrvba78847jSSzdOlSz7JGjRoZSeaTTz7x2vahhx4y0dHR5pdffvFafu+99xqHw2F27NhR4nNwt/vOO+94lqWnp5vExESvOvl7nPfee89IMg8//LDXdpdffrmx2Wzm119/9SyTZCSZb7/91rNs+/btJiIiwlx66aWeZYWH2x08eNDUrFnT3HDDDV7H2L17t4mLiyuyvDBfw+2GDBni9b1ZtGiRkWQ++OADr30vvPBCc9JJJ3kev/baa8Zut5uvvvrKa7tnn33WSPI5VMKq8HHdw3Lq1KnjNZTh/fff99mfwtzDKArzNWSxuHPKGP+/N76GfK5cudJIMq+++mqR43fv3t24XC7P8jFjxhiHw2HS0tJKfF7+/py6n//AgQNLbK9wvzp37uw1HMyYot+bwsewkmTsdrv54YcfimxfuEa5ubmmTZs2plu3bl7L/R1u5297xfVp+PDhJjEx0fzzzz9ey6+66ioTFxfnaT8vL8/k5OR4bXPgwAFTr149c91113mW3X777SY2NrZI/Yrz+uuvG5vNZm6++eZSty3PcDtJJiwszOt3zXfffWckmRkzZniW+fqZKG6IV1l//z3++OOebfLy8kyXLl38Gtq2adMmExkZaSSZdu3amdtvv92899575tChQ0W2La6v2dnZniFrblu3bjXh4eFm0qRJnmXFDbdzuVymWbNmplevXl4/q1lZWSY5Odn06NHDsywuLi5gw3JLGm63YsUK079/fzNnzhzz/vvvm8mTJ5s6deqYiIgIs27dOs928+bNM5LMl19+WaSNAQMGmISEBK/jFf4ZMsaYH374wUgyzz77bIn9LW643fTp040k8/rrr3uW5ebmmpSUFBMTE2MyMjJKbNeX7t27m9jYWHPgwAHPspEjRxqHw+Fz+7p165qrrrrKq0+jRo0yb7zxhpk/f765/fbbTUhIiGnWrJnXsMSytInKw3A7BExMTIxnlrtdu3Zpw4YNGjp0qGrXru3Z5pRTTlGPHj300Ucf+dXm4MGDvf6736FDBxljdN1113lt16FDB/3xxx+eoQHu9seOHeu13R133CFJRS5lJycnq1evXl7L5s2bpy5duqhWrVr6559/PB/du3dXfn6+X0PX6tev77l8L0mxsbEaPHiw1q9f7/mPlb/H+eijj+RwOHTbbbcVeU7GmCI3yqakpKh9+/aexw0bNtQll1yiRYsWKT8/32d/Fy9erLS0NA0cONCrLw6HQx06dPA5HKisunXrphNOOMHrCseBAwe0ePFiXXnllZ5l8+bNU6tWrdSyZUuvvrj/C1zevlx55ZWqVauW57H7P72///57udorjq9zys2f701kZKRnvdPp1L59+9S0aVPVrFnT55CbG2+80WuoWpcuXZSfn6/t27cX28fy/JzefPPNJTzrom644QafNy2XRdeuXdW6desiy601OnDggNLT09WlS5dyD0kqS3uF+2SM0TvvvKO+ffvKGON1zvbq1Uvp6emedhwOh+cqqsvl0v79+z3/lbceq2bNmjp06JBfs4D99NNPuu6663TJJZdo5syZ5Xr+/ujevbuaNGnieXzKKacoNja23D8/Zfn9FxISoltuucWzr8Ph0K233urXcU4++WRt2LBB11xzjbZt26ann35a/fr1U7169fTCCy/41UZ4eLhnyFp+fr727dunmJgYtWjRwq9zbsOGDdqyZYsGDRqkffv2eZ7roUOHdP755+vLL7/0DDGsWbOmVq9erZ07d/rVt4rSsWNHzZ8/X9ddd50uvvhi3XvvvVq1apVsNpvGjRvn2e7w4cOS5DU5h1tERIRnvXvb4raztlVWH330kRISEjRw4EDPstDQUM8Me1988UWZ2nv00Uf12Wef6bHHHlPNmjW9+m8d9WBV+LnefvvtmjFjhgYNGqT+/ftr+vTpeuWVV7RlyxbNmjWrXG2i8jDcDgGTmZnpGdvtfmFmHWLk1qpVKy1atEiHDh1SdHR0iW02bNjQ63FcXJwkFbk0HxcXJ5fLpfT0dNWpU0fbt2+X3W4vMhtPQkKCatasWeSFY3JycpFjb9myRd9//73q1q3rs2979+4tse9SwWxAhe+xaN68uaSCe2QSEhL8Ps727dtVv3591ahRw2t9q1atPOutmjVrVqSt5s2bKysrS3///bcSEhKKrN+yZYskFTscpfBwifIICQlR//79NXfuXOXk5Cg8PFwLFiyQ0+n0CklbtmzRTz/9dEz196XwOeUOTAcOHChXe8XxdU65+fO9OXz4sCZPnqzU1FT99ddfXkPb0tPTi+xfnudVnp/Tkp6XL2XdvixtfPjhh3r44Ye1YcMGr/vUyjt1dVnaK9ynv//+W2lpaXr++ef1/PPP+2zfes6+8soreuqpp/Tzzz/L6XT6bHfEiBF6++231bt3b5144onq2bOnrrjiCl1wwQVF2n7rrbeUm5urWbNmlfnek7IofJ5JBedaeX9+yvL7LzEx0WvGMMn3uVuc5s2b67XXXlN+fr5+/PFHffjhh3r88cd14403Kjk5Wd27dy9xf5fLpaefflqzZs3S1q1bvf7ZVNxQQyv379eShgimp6erVq1aevzxxzVkyBAlJSWpffv2uvDCCzV48GCddNJJfj7bitO0aVNdcsklWrBggfLz8+VwODz/UPB1f2h2drbXPxwiIyOL3c69vjy2b9+uZs2aFTnfi/ubWJK33npL999/v4YPH+4VxN39K+4ev8LP1ZdBgwbpjjvu0GeffaZ77723QtpEYBCSEBB//vmn0tPTi4SSY1Xcf6CLW258TGDgD1+/kFwul3r06KG7777b5z7usHOsKus4/vZFKrgvyVeICgmpmF8hV111lZ577jl9/PHH6tevn95++221bNlSp556qldf2rZtq6lTp/pso7gx7KXx99wprLhzqbircsf6R+7WW29VamqqRo8erZSUFMXFxclms+mqq67yOXFIeZ9XWZX1efnaviJq+dVXX+niiy/WOeeco1mzZikxMVGhoaFKTU3V3Llzy9TH8rRXuE/u78k111xT7Itg91skvP766xo6dKj69eunu+66S/Hx8XI4HJo8ebJ+++03z/bx8fHasGGDFi1apI8//lgff/yxUlNTNXjw4CI3p7undU5MTPTr+Zb2X/ysrCyf7+1S0edZMH7/ORwOtW3bVm3btlVKSorOO+88vfHGG6WGpEcffVQPPPCArrvuOj300EOqXbu27Ha7Ro8e7ddkPu5tnnjiiWKnBneHwCuuuEJdunTRu+++q08//VRPPPGEpkyZogULFqh3795le8IVICkpSbm5uTp06JBiY2M959muXbuKbLtr1y7Vr1/f8zgxMVF//fWXz+0keW0bDIsXL9bgwYPVp08fn+8xlpiYqPz8fO3du9drko/c3Fzt27fPr/4nJSVp//79FdomKh4hCQHx2muvSZJneJF7BqHNmzcX2fbnn3/WCSecUOpVpGPRqFEjuVwubdmyxfNfJUnas2eP0tLSfM5wVFiTJk2UmZlZ6h/Okvz6668yxni9KPzll18kyXPzub/Hcd94fPDgQa+rST///LNnvZX7v5ZWv/zyi6Kioor9r617GE18fPwxPe/SnHPOOUpMTNRbb72lzp07a+nSpZ6bpK19+e6773T++edX6Jtalpf7ykxaWprXUIyy/LfSzZ/vzfz58zVkyBA99dRTnm2ys7P9ns3LH8H6Oa1Vq5bP51GWWr7zzjuKiIjQokWLvIbypKamlqtPx9pe3bp1VaNGDeXn55f6szN//nyddNJJWrBggde5XfhNTaWCG+H79u2rvn37yuVyacSIEXruuef0wAMPeP1T6pxzzilTUCnpe+9e7s/vSX8V9zNclt9/S5YsUWZmptfVpOL67y/3jfPWF/vF9XX+/Pk677zzNGfOHK/laWlpXjf6l/RcpYIr8v78fk1MTNSIESM0YsQI7d27V6effroeeeSRoISk33//XREREZ7at2nTRiEhIfr22291xRVXeLbLzc3Vhg0bvJa1a9dOy5YtU0ZGhtdohNWrV3vWl6S4ejZq1Ejff/+9XC6X19Wk4v4m+rJ69WpdeumlOuOMM/T222/7/Eegu3/ffvutLrzwQs/yb7/9Vi6Xq9T+G2O0bds2nXbaaRXWJgKDe5JQ4ZYuXaqHHnpIycnJuvrqqyUV/HJv166dXnnlFa8XQ5s2bdKnn37q9UshENztF56Bzn1Vwp+Zr6644gqtXLlSixYtKrIuLS2t2KlRrXbu3Ok1k15GRoZeffVVtWvXznOlxt/jXHjhhcrPz9d//vMfr22mTZsmm81W5A/nypUrvcbJ//HHH3r//ffVs2fPYv8b3KtXL8XGxurRRx/1GgLk5u+U0qWx2+26/PLL9cEHH+i1115TXl6e11A7qaAuf/31l8/7BQ4fPlzumdLKy/0Cx3ov2qFDh/yabrYwf743DoejyIveGTNmFHu1pTyC9XPapEkTpaen6/vvv/cs27VrV5FZJ0vicDhks9m86rFt27Zyz3p4rO05HA71799f77zzjjZt2lRkvfVnx/09tn5/V69erZUrV3rtU/hNP+12u+dqVOHhS507d9aoUaP86qt09Hv/+uuvFwmsa9eu1apVqyr0xXh0dLTPYFyW3395eXmaPXu2Z31+fr5mzJjh1/G/+uorn7/T3PfdWYftFddXXz+T8+bNK3KVxP2PhcJttG/fXk2aNNGTTz6pzMzMIu27z5H8/PwiQ2rj4+NVv359v97+4Fj4+h3/3XffaeHCherZs6cnjMTFxal79+56/fXXPfciSwX/MM3MzNSAAQM8yy6//HLl5+d7DUPNyclRamqqOnToUOqogOjoaJ9DjC+88ELt3r3b6/7WvLw8zZgxQzExMeratWuJ7f7000/q06ePGjdurA8//LDYq+TdunVT7dq1vc49qeANY6OiorxeT/iq3+zZs/X33397DZMtS5uoPFxJwjH5+OOP9fPPPysvL0979uzR0qVLtXjxYjVq1EgLFy70Gp7xxBNPqHfv3kpJSdHw4cM9UwvHxcVpwoQJAe3nqaeeqiFDhuj5559XWlqaunbtqm+++UavvPKK+vXrp/POO6/UNu666y4tXLhQF110kYYOHar27dvr0KFD2rhxo+bPn69t27Z5/ffQl+bNm2v48OFas2aN6tWrp5deekl79uzx+u+0v8fp27evzjvvPN13333atm2bTj31VH366ad6//33NXr0aK+bqaWC//T16tXLa5ppSV7vLF9YbGysZs+erWuvvVann366rrrqKtWtW1c7duzQ//73P3Xq1KlISCuvK6+8UjNmzND48ePVtm1bryt+UsG08m+//bZuvvlmLVu2TJ06dVJ+fr5+/vlnvf322573IKosPXv2VMOGDTV8+HDdddddcjgceumllzz1KQt/vjcXXXSRXnvtNcXFxal169ZauXKlPvvsM7/ufSiLYPycXnXVVbrnnnt06aWXet5hfvbs2WrevLnfky706dNHU6dO1QUXXKBBgwZp7969mjlzppo2beoVvvxVEe099thjWrZsmTp06KAbbrhBrVu31v79+7Vu3Tp99tlnnuE2F110kRYsWKBLL71Uffr00datW/Xss8+qdevWXi+er7/+eu3fv1/dunVTgwYNtH37ds2YMUPt2rUr8vMybtw4vfLKK2W6mjR16lT16tVL7dq109ChQ1W/fn399NNPev7555WYmOh1o/6xat++vWbPnq2HH35YTZs2VXx8vLp161am33+dOnXSvffeq23btnnec87Xi2dfpkyZorVr1+qyyy7zBM1169bp1VdfVe3atT3Ts5fU14suukiTJk3SsGHD1LFjR23cuFFvvPFGkfuEmjRpopo1a+rZZ59VjRo1FB0drQ4dOig5OVkvvviievfurZNPPlnDhg3TiSeeqL/++kvLli1TbGysPvjgAx08eFANGjTQ5ZdfrlNPPVUxMTH67LPPtGbNGq8ry59//rnOO+88jR8/vtSf1S+//NLzD56///5bhw4d0sMPPyyp4CrkOeecI6ng93JkZKQ6duyo+Ph4/fjjj3r++ecVFRWlxx57zKvNRx55RB07dlTXrl1144036s8//9RTTz2lnj17egWCDh06aMCAARo3bpz27t2rpk2b6pVXXtG2bduKXJXzpX379nrrrbc0duxYnXnmmYqJiVHfvn1144036rnnntPQoUO1du1aNW7cWPPnz9eKFSs0ffr0IvfvWh08eFC9evXSgQMHdNdddxWZzKlJkyZKSUmRVDC09qGHHtLIkSM1YMAA9erVS1999ZVef/11PfLII16T3jRq1EhXXnml2rZtq4iICC1fvlxvvvmm2rVrp5tuusmzXVnaRCWq/An1UB24p3R1f4SFhZmEhATTo0cP8/TTTxc71eZnn31mOnXqZCIjI01sbKzp27ev+fHHH0s9XnHT0xY3Fbmvd7l2Op1m4sSJJjk52YSGhpqkpCQzbtw4k52d7bVvo0aNirzrtdvBgwfNuHHjTNOmTU1YWJg54YQTTMeOHc2TTz7pNTW5L+52Fy1aZE455RQTHh5uWrZs6XPKXX+Pc/DgQTNmzBhTv359Exoaapo1a2aeeOIJr+lkjSmYqnfkyJHm9ddfN82aNTPh4eHmtNNO85qa21pP61S9xhTUv1evXiYuLs5ERESYJk2amKFDh3pNW+2LP1OAu7lcLpOUlORzWnO33NxcM2XKFHPyySeb8PBwU6tWLdO+fXszceJEr+lUfSluCnDru767STLjx48vsT1jjFm7dq3p0KGDCQsLMw0bNjRTp04tdgrw4s4pf783Bw4cMMOGDTMnnHCCiYmJMb169TI///xzkemsi/uZ8PW9KI4/P6f+vpN8af1y+/TTT02bNm1MWFiYadGihXn99deLnQK8uKmQ58yZ46lhy5YtTWpqqs82/J0C3N/2SurTnj17zMiRI01SUpIJDQ01CQkJ5vzzzzfPP/+8ZxuXy2UeffRR06hRI8/3/8MPPyxyzs6fP9/07NnTxMfHe865m266yezatavIcYcMGeJzivrSrFq1ylx00UWmVq1aJiQkxJx44onm+uuvN3/++WeRbYt73sWdk9afid27d5s+ffqYGjVqGEleU1D7+/tv37595tprrzWxsbEmLi7OXHvttWb9+vV+TQG+YsUKM3LkSNOmTRsTFxdnQkNDTcOGDc3QoUPNb7/95rVtcX3Nzs42d9xxh0lMTDSRkZGmU6dOZuXKlaZr165FptR+//33TevWrU1ISEiR/q1f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Q/Hx8erXr582b97stU12drZGjhypOnXqKCYmRv3799eePXu8trHZbEU+3nzzTc/6Xbt2adCgQWrevLnsdrtGjx7tV/927NihPn36KCoqSvHx8brrrruUl5d3zM+7slT1+pbWblVXWfVdsGCBevToobp16yo2NlYpKSlatGhRqf37/vvv1aVLF0VERCgpKUmPP/54xTzxSlKV67tt2zaf7a5atariChBglVXf5cuXq1OnTqpTp44iIyPVsmVLTZs2rdT+cf4WCER9OX+PKsvfoRUrVigkJETt2rUrtX/H+/krVe0acw4fVVp9P//8c5/b7N69u8T+Veo5bFBEr169TGpqqtm0aZPZsGGDufDCC03Dhg1NZmamZ5ubb77ZJCUlmSVLlphvv/3WnH322aZjx45e7UgyqampZteuXZ6Pw4cPe9Zv3brV3HbbbeaVV14x7dq1M7fffnupfcvLyzNt2rQx3bt3N+vXrzcfffSROeGEE8y4ceMq7PkHWlWurz/tVnWVVd/bb7/dTJkyxXzzzTfml19+MePGjTOhoaFm3bp1xfYtPT3d1KtXz1x99dVm06ZN5r///a+JjIw0zz33XMUXIkCqcn23bt1qJJnPPvvMq93c3NyKL0SAVFZ9161bZ+bOnWs2bdpktm7dal577TUTFRVV4rnI+XtUIOrL+XuUv3+HDhw4YE466STTs2dPc+qpp5bYt+pw/hpTtWvMOXxUafVdtmyZkWQ2b97stU1+fn6xfavsc5iQ5Ie9e/caSeaLL74wxhiTlpZmQkNDzbx58zzb/PTTT0aSWblypWeZJPPuu+/6dYyuXbv69SL+o48+Mna73ezevduzbPbs2SY2Ntbk5OT494SqmKpU37K2ezyojPq6tW7d2kycOLHY9bNmzTK1atXyOlfvuece06JFizIdpyqpSvV1/4Fev359mdqtyiqzvpdeeqm55ppril3P+RvY+nL+lr2+V155pbn//vvN+PHjS30BXx3PX2OqVo05h/2vrzskHThwwO++VPY5zHA7P6Snp0uSateuLUlau3atnE6nunfv7tmmZcuWatiwoVauXOm178iRI3XCCSforLPO0ksvvSRzjG9LtXLlSrVt21b16tXzLOvVq5cyMjL0ww8/HFPbwVKV6hvodoOhsurrcrl08OBBz3F8Wblypc455xyFhYV5lvXq1UubN2/WgQMHyvX8gq0q1dft4osvVnx8vDp37qyFCxeW52lVGZVV3/Xr1+vrr79W165di92G8zew9XXj/C1QWn1TU1P1+++/a/z48X71pTqev1LVqrEb53ABf35HtGvXTomJierRo4dWrFhRYl8q+xwOqfAWqxmXy6XRo0erU6dOatOmjSRp9+7dCgsLU82aNb22rVevntdYykmTJqlbt26KiorSp59+qhEjRigzM1O33XZbufuze/dur4DkPq573fGmqtU3kO0GQ2XW98knn1RmZqauuOKKYvuze/duJScnFzmue12tWrXK8zSDpqrVNyYmRk899ZQ6deoku92ud955R/369dN7772niy+++NifcCWrjPo2aNBAf//9t/Ly8jRhwgRdf/31xfaH8zew9eX89b++W7Zs0b333quvvvpKISH+vZSrbuevVPVqzDnsf30TExP17LPP6owzzlBOTo5efPFFnXvuuVq9erVOP/10n/2p7HOYkFSKkSNHatOmTVq+fHmZ933ggQc8X5922mk6dOiQnnjiiePyxXagVMX6VqfvW2XVd+7cuZo4caLef/99xcfHH1OfjydVrb4nnHCCxo4d63l85plnaufOnXriiSeOyz/QlVHfr776SpmZmVq1apXuvfdeNW3aVAMHDjzmvh8Pqlp9OX+PKqm++fn5GjRokCZOnKjmzZtXZJePO1WtxpzDR5X2O6JFixZq0aKFZ5uOHTvqt99+07Rp0/Taa68de+crAMPtSjBq1Ch9+OGHWrZsmRo0aOBZnpCQoNzcXKWlpXltv2fPHiUkJBTbXocOHfTnn38qJyen3H1KSEgoMoOI+3FJx66KqmJ9K7PdQKus+r755pu6/vrr9fbbb3tdfveF8zew9S2u3V9//bXM+wVbZdU3OTlZbdu21Q033KAxY8ZowoQJxbbB+RvY+hbXLuevd30PHjyob7/9VqNGjVJISIhCQkI0adIkfffddwoJCdHSpUt9tlGdzl+pata4uHY5h/17LXXWWWeVWKvKPocJST4YYzRq1Ci9++67Wrp0aZFLe+3bt1doaKiWLFniWbZ582bt2LFDKSkpxba7YcMG1apVS+Hh4eXuW0pKijZu3Ki9e/d6li1evFixsbFq3bp1udutTFW5vpXZbqBUZn3/+9//atiwYfrvf/+rPn36lNq3lJQUffnll3I6nZ5lixcvVosWLY6boR5Vub7FtZuYmFiufYMhmL8fXC5XiX/AOX8DW9/i2uX89a5vbGysNm7cqA0bNng+br75ZrVo0UIbNmxQhw4dfLZRHc5fqWrXuLh2OYf9+x1RWq0q/RwOyHQQx7lbbrnFxMXFmc8//9xrWsKsrCzPNjfffLNp2LChWbp0qfn2229NSkqKSUlJ8axfuHCheeGFF8zGjRvNli1bzKxZs0xUVJR58MEHvY61fv16s379etO+fXszaNAgs379evPDDz941i9YsMBr1g73FOA9e/Y0GzZsMJ988ompW7fucTUFeFWur7/tVmWVVd833njDhISEmJkzZ3odJy0tzbPNjBkzTLdu3TyP09LSTL169cy1115rNm3aZN58881SpwWuaqpyfV9++WUzd+5c89NPP5mffvrJPPLII8Zut5uXXnopwFWpOJVV3//85z9m4cKF5pdffjG//PKLefHFF02NGjXMfffd59mG87dy68v5W6A8f4d8zbxWHc9fY6p2jTmHC/hT32nTppn33nvPbNmyxWzcuNHcfvvtxm63m88++8yzTbDPYUKSD5J8fqSmpnq2OXz4sBkxYoSpVauWiYqKMpdeeqnZtWuXZ/3HH39s2rVrZ2JiYkx0dLQ59dRTzbPPPltk/ndfx2nUqJFnfWpqqimcZbdt22Z69+5tIiMjzQknnGDuuOMO43Q6A1KLQKjK9fW33aqssurbtWtXn8cZMmSIZ5vx48d71dsYY7777jvTuXNnEx4ebk488UTz2GOPBaoUAVGV6/vyyy+bVq1amaioKBMbG2vOOussr2lajweVVd9nnnnGnHzyyZ5anXbaaWbWrFle23D+Vm59OX8LlOfvkK8X8NXx/DWmateYc7iAP/WdMmWKadKkiYmIiDC1a9c25557rlm6dKlXX4J9DtuMOY7nNgYAAACACsY9SQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAHFeMMerevbt69epVZN2sWbNUs2ZN/fnnn0HoGQCguiAkAQCOKzabTampqVq9erWee+45z/KtW7fq7rvv1owZM9SgQYMKPabT6azQ9gAAVRshCQBw3ElKStLTTz+tO++8U1u3bpUxRsOHD1fPnj112mmnqXfv3oqJiVG9evV07bXX6p9//vHs+8knn6hz586qWbOm6tSpo4suuki//fabZ/22bdtks9n01ltvqWvXroqIiNAbb7wRjKcJAAgSmzHGBLsTAACUR79+/ZSenq7LLrtMDz30kH744QedfPLJuv766zV48GAdPnxY99xzj/Ly8rR06VJJ0jvvvCObzaZTTjlFmZmZevDBB7Vt2zZt2LBBdrtd27ZtU3Jysho3bqynnnpKp512miIiIpSYmBjkZwsAqCyEJADAcWvv3r06+eSTtX//fr3zzjvatGmTvvrqKy1atMizzZ9//qmkpCRt3rxZzZs3L9LGP//8o7p162rjxo1q06aNJyRNnz5dt99+e2U+HQBAFcFwOwDAcSs+Pl433XSTWrVqpX79+um7777TsmXLFBMT4/lo2bKlJHmG1G3ZskUDBw7USSedpNjYWDVu3FiStGPHDq+2zzjjjEp9LgCAqiMk2B0AAOBYhISEKCSk4M9ZZmam+vbtqylTphTZzj1crm/fvmrUqJFeeOEF1a9fXy6XS23atFFubq7X9tHR0YHvPACgSiIkAQCqjdNPP13vvPOOGjdu7AlOVvv27dPmzZv1wgsvqEuXLpKk5cuXV3Y3AQBVHMPtAADVxsiRI7V//34NHDhQa9as0W+//aZFixZp2LBhys/PV61atVSnTh09//zz+vXXX7V06VKNHTs22N0GAFQxhCQAQLVRv359rVixQvn5+erZs6fatm2r0aNHq2bNmrLb7bLb7XrzzTe1du1atWnTRmPGjNETTzwR7G4DAKoYZrcDAAAAAAuuJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGDx//9b+2ytUZogAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "'Code executed successfully.'"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "execute_cleaned_code_from_string(response.choices[0].message.content)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:37:05.286075Z",
     "start_time": "2024-01-23T07:37:04.861843Z"
    }
   },
   "id": "285ba8b5fa516b4a"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 使用 GLM-4 模型进行分析\n",
    "\n",
    "我们用同样的数据，使用GLM-4 模型进行分析，首先，我们需要读入图片，我们先展示部分的数据。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "4c8ea11cee35a9a7"
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/87/sm46bt2s7hqbsj34djxvt2x40000gn/T/ipykernel_39831/501768564.py:1: DeprecationWarning: \n",
      "Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),\n",
      "(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)\n",
      "but was not found to be installed on your system.\n",
      "If this would cause problems for you,\n",
      "please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466\n",
      "        \n",
      "  import pandas as pd\n"
     ]
    },
    {
     "data": {
      "text/plain": "   United States  USA  1500  0.2000000029802322  99.800003\n0  United States  USA  1600            0.700000  99.300003\n1  United States  USA  1700            2.000000  98.000000\n2  United States  USA  1790            5.132197  94.867805\n3  United States  USA  1800            6.072752  93.927246\n4  United States  USA  1810            7.257840  92.742157",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>United States</th>\n      <th>USA</th>\n      <th>1500</th>\n      <th>0.2000000029802322</th>\n      <th>99.800003</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>United States</td>\n      <td>USA</td>\n      <td>1600</td>\n      <td>0.700000</td>\n      <td>99.300003</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>United States</td>\n      <td>USA</td>\n      <td>1700</td>\n      <td>2.000000</td>\n      <td>98.000000</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>United States</td>\n      <td>USA</td>\n      <td>1790</td>\n      <td>5.132197</td>\n      <td>94.867805</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>United States</td>\n      <td>USA</td>\n      <td>1800</td>\n      <td>6.072752</td>\n      <td>93.927246</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>United States</td>\n      <td>USA</td>\n      <td>1810</td>\n      <td>7.257840</td>\n      <td>92.742157</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "file_path = 'data/urban-vs-rural-majority/urban-vs-rural-majority.csv'\n",
    "urban_rural_data = pd.read_csv(file_path)\n",
    "urban_rural_data.head()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:37:05.493563Z",
     "start_time": "2024-01-23T07:37:05.287175Z"
    }
   },
   "id": "aad7a47e878640e1"
  },
  {
   "cell_type": "markdown",
   "source": [
    "设定好提示词，为一会模型的生成提供引导。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "bcd025adb4d2ad66"
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [],
   "source": [
    "formatted_data = urban_rural_data.to_string(index=False)\n",
    "sys_message = \"\"\"\n",
    "你是一个数据分析工程师，你将要为我分析提供的表格内容我将为你提供以下的一个表格，请你帮我分析美国城市和乡村人口比例的分布和趋势\n",
    "美国, 1500到2050年居住在城市与农村地区的人口比例。此处，“大多数城市”表示超过 50% 的人口居住在城市中心； “大多数是农村人口”表示低于 50%。城市人口是根据国家统计局对城市地区的定义来定义的。这是基于对 2016 年的估计，并结合联合国对 2050 年的预测。\n",
    "\"\"\"\n",
    "# 构建请求内容\n",
    "message = f\"请分析以下城乡人口数据：\\n{formatted_data}\\n 重点确定不同地区和年份的城市化趋势、变化以及重要模式。请你直接返回给我结论，带有具体的数值\"\n",
    "\n",
    "# 构建 JSON 结构\n",
    "request_data = [\n",
    "    {\n",
    "        \"role\": \"system\",\n",
    "        \"content\": sys_message\n",
    "    },\n",
    "    {\n",
    "        \"role\": \"user\",\n",
    "        \"content\": message\n",
    "    }\n",
    "]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:37:05.500636Z",
     "start_time": "2024-01-23T07:37:05.497262Z"
    }
   },
   "id": "86ebdb41e8f4d7f8"
  },
  {
   "cell_type": "markdown",
   "source": [
    "我们先让 GLM对读入的csv表格进行分析。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "6ecbcfe3b4ff9dc"
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "'根据提供的数据，以下是美国从1500年到2050年城市与农村人口比例的分析结论：\\n\\n1. **城市化趋势**：从1500年到2050年，美国城市人口比例呈现显著增长趋势。在1500年，城市人口仅占总人口的0.2%，而到2050年，这一比例预计将增长至89.16%，城市化进程非常明显。\\n\\n2. **具体数值变化**：\\n   - **1500年**：城市人口比例0.2%，农村人口比例99.8%\\n   - **1800年**：城市人口比例6.07%，农村人口比例93.93%\\n   - **1900年**：城市人口比例39.98%，农村人口比例60.02%\\n   - **1950年**：城市人口比例64.15%，农村人口比例35.85%\\n   - **2000年**：城市人口比例79.06%，农村人口比例20.94%\\n   - **2016年**：城市人口比例81.86%，农村人口比例18.14%\\n   - **2050年（预测）**：城市人口比例89.16%，农村人口比例10.84%\\n\\n3. **重要模式**：\\n   - 在19世纪中叶（特别是1850年以后），城市化速度明显加快，这可能与工业革命和随后的移民潮有关。\\n   - 20世纪中叶（特别是1950年代），城市人口比例迅速增长，这可能与二战后的经济扩张和郊区化趋势有关。\\n   - 从1970年代到2000年代，城市人口比例的增长速度相对放缓，但仍然持续增长。\\n   - 从2010年到2050年，预测显示城市化进程将继续，但增长速度有所放缓。\\n\\n这些数据表明，美国正经历着持续的城市化过程，城市人口比例不断上升，而农村人口比例相应下降。这一趋势在未来的几十年里预计仍将持续。'"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4\",\n",
    "    messages=request_data,\n",
    "    top_p=0.8,\n",
    "    temperature=0.8,\n",
    "    max_tokens=8192,\n",
    ")\n",
    "response.choices[0].message.content"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:37:21.067052Z",
     "start_time": "2024-01-23T07:37:05.500954Z"
    }
   },
   "id": "6d9ebc57b6aa04e6"
  },
  {
   "cell_type": "markdown",
   "source": [
    "接着，让 GLM-4V 模型绘图，并将结果返回给我们。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "63313f268c342fd4"
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracted code: import matplotlib.pyplot as plt\n",
      "import numpy as np\n",
      "\n",
      "# 初始的城市和农村人口比例\n",
      "nurban_ratio = [81.862]  # 2016年的城市人口比例\n",
      "nrural_ratio = [18.138]  # 2016年的农村人口比例\n",
      "\n",
      "# 要预测的年份\n",
      "years = list(range(2051, 2056))\n",
      "\n",
      "# 模拟每年城市和农村人口比例的变化\n",
      "np.random.seed(0)  # 为了结果的可重复性，设置随机种子\n",
      "for year in years:\n",
      "    # 假设城市人口比例每年增加一个小的随机量，农村人口比例相应减少\n",
      "    urban_change = np.random.uniform(0.1, 0.3)  # 城市人口增长率的随机量\n",
      "    rural_change = -urban_change  # 农村人口比例变化与城市相反\n",
      "    \n",
      "    # 更新城市和农村人口比例\n",
      "    nurban_ratio.append(max(0, min(100, nurban_ratio[-1] + urban_change)))\n",
      "    nrural_ratio.append(max(0, min(100, nrural_ratio[-1] + rural_change)))\n",
      "\n",
      "# 绘制图表\n",
      "plt.figure(figsize=(10, 5))\n",
      "plt.plot(years, nurban_ratio[1:], label='Urban Population Ratio')\n",
      "plt.plot(years, nrural_ratio[1:], label='Rural Population Ratio')\n",
      "\n",
      "# 连接数据点\n",
      "plt.plot(years, nurban_ratio[1:], 'bo-')\n",
      "plt.plot(years, nrural_ratio[1:], 'ro-')\n",
      "\n",
      "# 添加图例\n",
      "plt.legend()\n",
      "\n",
      "# 添加标题和轴标签\n",
      "plt.title('Urban vs Rural Population Ratio Forecast (2051-2055)')\n",
      "plt.xlabel('Year')\n",
      "plt.ylabel('Population Ratio (%)')\n",
      "\n",
      "# 显示图表\n",
      "plt.show()\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 1000x500 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAHWCAYAAACi1sL/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABzoElEQVR4nO3deZyN5f/H8fc5sy9mGMyMZSzZ14hkKyqRRPY236xJKSQt+lZIJSlLCflVaEFZKmmRbCGUrS/RUAhli8zYZ8xcvz9mzu0+M2c4w8ycwev5eJzHnHPd133dn/tyz7g+93IdhzHGCAAAAAAgSXL6OgAAAAAAyE9IkgAAAADAhiQJAAAAAGxIkgAAAADAhiQJAAAAAGxIkgAAAADAhiQJAAAAAGxIkgAAAADAhiQJAAAAAGxIkoDL3NSpU+VwOLR27Vpfh3LV69atm8qUKePrMC7Zrl275HA4NHXq1Bxtt0yZMurWrVuOtpkfDR06VA6Hw9dhXNX27Nmj4OBgrVy50tehXHUmTZqkUqVK6cyZM74OBbgkJEmAD7gGUf/884/H5dWrV1fTpk3zNqjLiMPhcHtFRESoSZMm+uqrr3wdmleaNm3qFn9UVJSuv/56vf/++0pNTfV1eJfkxx9/1NChQ3X06FFfh2JxnUhwvfz9/VWiRAl169ZNf/3110W1efLkSQ0dOlRLly7N2WA9cP298PSaNGlSrm/f1yZMmJDthP3FF1/UDTfcoEaNGlllc+fO1d13361rrrlGoaGhqlSpkp544oksj9V58+bpuuuuU3BwsEqVKqUhQ4bo7NmzbnUyHlv21/79+93qfvLJJ+rSpYsqVKggh8OR7b/xixYtUo8ePVSxYkWFhobqmmuuUa9evbRv3z6P9X/88Uc1btxYoaGhio2NVb9+/XT8+HG3OkuXLs0y/tWrV7vVzfh3y/W6/fbb3ep169ZNSUlJeuedd7K1f0B+4+/rAADgYtx222164IEHZIzRn3/+qYkTJ6p169b65ptv1KJFC1+Hd0ElS5bUiBEjJEmHDh3SBx98oJ49e2rbtm169dVXfRzdxfvxxx81bNgwdevWTQULFnRbFh8fL6fTd+fmXnzxRZUtW1anT5/W6tWrNXXqVK1YsUKbN29WcHBwtto6efKkhg0bJkmZBrvPPfecnnnmmZwK2zJx4kSFh4e7ld1www05vp38ZsKECSpSpIjXVyEPHTqkadOmadq0aW7lvXv3VvHixdWlSxeVKlVKmzZt0vjx4/X1119r/fr1CgkJsep+8803atu2rZo2baq33npLmzZt0ksvvaSDBw9q4sSJmbbpOrbsMh7/EydO1Lp163T99dfr8OHD3u28zdNPP60jR46oU6dOqlChgnbs2KHx48dr/vz52rhxo2JjY626Gzdu1K233qoqVapo9OjR2rt3r15//XVt375d33zzTaa2+/Xrp+uvv96trHz58pnq2f9uuRQvXtztc3BwsLp27arRo0frscce46oqLlskScBl6vTp0woMDPR1GD5TsWJFdenSxfrcoUMHVa1aVePGjcuxJOnkyZMKDQ3NkbYyioyMdIv/oYceUqVKlTR+/HgNHz5cAQEBubJdXwoKCvLp9lu2bKm6detKknr16qUiRYpo5MiRmjdvnjp37pxj2/H395e/f87/99qxY0cVKVIkx9s9ceKEwsLCcrxdX/noo4/k7++v1q1bu5XPnj07U0Jbp04dde3aVR9//LF69epllQ8aNEg1a9bUd999Z/1bRkRE6JVXXlH//v1VuXJlt3bsx1ZWPvzwQ5UoUUJOp1PVq1fP9n6NHj1ajRs3djvRcPvtt6tJkyYaP368XnrpJav82WefVaFChbR06VJFRERISrvd9cEHH9R3332n5s2bu7V94403qmPHjheMIePfrax07txZr732mpYsWaJbbrnF210E8hVutwMuA65bImbOnKnnnntOJUqUUGhoqBITE606J0+e1EMPPaTChQsrIiJCDzzwgP7991+3dr744gu1atVKxYsXV1BQkMqVK6fhw4crJSXFrV7Tpk1VvXp1bdmyRTfffLNCQ0NVokQJvfbaaxeMtXr16rr55pszlaempqpEiRJu/xHPnDlTderUUYECBRQREaEaNWpo3Lhx2e0eSVKVKlVUpEgR/fHHH1aZ61aYXbt2udV19af9VinXPq9bt0433XSTQkND9eyzz0ryvt8uRWhoqOrXr68TJ07o0KFDkqQdO3aoU6dOioqKspZnvKXQtS+ffPKJnn32WcXGxiosLExt2rTRnj173Opm9UxQ06ZNL3jrz//+9z9169ZN11xzjYKDgxUbG6sePXq4nREfOnSonnzySUlS2bJlrdtxXP3vafvZ2cdPP/1UL7/8skqWLKng4GDdeuut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/fWmfv361udPPvnEdOvWzUybNs189tln5rnnnjOhoaGmSJEiHte/mH06n+HDhxtJZtGiRVbZrFmzMv1eunTq1MnExsZan1euXGk6dOhg3nvvPfPFF1+YESNGmMKFC5vg4GCzfv16t3V79Ohhhg4daubMmWM++OAD06ZNGyPJdO7c2WNsvXv3NiEhIZe8j4CvcLsdcBnp2rVrllcFevfu7XY27+GHH5a/v7++/vprq8y+7rFjx/TPP//oxhtv1MmTJ/Xbb7+5tRceHu5273lgYKDq1aunHTt2nDfGihUrqlatWvrkk0+sspSUFM2ePVutW7e2YihYsKBOnDihhQsXerHnmb333nsqWrSooqOjVbduXS1atEhPPfWUBg4ceFHtSWnPzHTv3j1TeXb6zVu//fabihYtqqJFi6pKlSp666231KpVK73//vuSpK+//lr16tVT48aNrXXCw8PVu3dv7dq1S1u2bHFr74EHHlCBAgWszx07dlSxYsXc/v0vhb0PTp8+rX/++Uf169eXJK1fv/6i2szuPnbv3t3t6qnrdrkLHZMuzZo1U9GiRRUXF6eOHTsqLCxM8+bNU8mSJa06fn5+1jZSU1N15MgR66z8peynpEzH5hNPPCFJXs/KOGfOHC1cuNB6ffzxx5KktWvX6uDBg3rkkUfcJqBo1aqVKleu7LH9jFdaZs2apcjISN122236559/rFedOnUUHh5u3W64cOFCHTt2TM8880ymyS7stxjaj5cTJ07on3/+UcOGDWWMsa5khISEKDAwUEuXLvV4S9/FcN3+ab86mJXp06frvffe0xNPPOF21cd1S6CnZ+iCg4Pdbhns3LmzpkyZogceeEBt27bV8OHDtWDBAh0+fFgvv/zype7Oef3www8aNmyYOnfu7PbcT3bib9iwoWbPnq0ePXqoTZs2euaZZ6wrw4MHD3Zb97333tOQIUPUvn17/ec//9EXX3yhBx98UJ9++mmmmfCktH+DU6dO6eTJkzm1y0CeIkkC8ilPMwJlnD3JLuOtHeHh4SpWrJjb8zi//vqr2rVrp8jISEVERKho0aJWIpSQkOC2fsmSJTPFUKhQIa8GM3fffbdWrlxpPQ+xdOlSHTx4UHfffbdV55FHHlHFihXVsmVLlSxZUj169NC33357wbZd7rrrLi1cuFBfffWV9QzIyZMnL+me/xIlSnic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qJDbLZXNmjWz7io4ceKE7rjjDv3111/6+uuvs5w9LzIyUs2aNdNHH33k9jfhww8/1PHjx9WpU6fzxv/LL79o3rx5Vl9JabM+Zvy7bIyxvpvJ03fTrV+/Xg0bNsxmDwD5B1eSAB+Ijo7WCy+8oOeee0433XST2rRpo9DQUP3444+aMWOGmjdvnumLEC8kKSlJt956qzp37qz4+HhNmDBBjRs3Vps2bSSlPaBbqFAhde3aVf369ZPD4dCHH37o9a1K2dW5c2cNGjRIgwYNUlRUVKZby3r16qUjR47olltuUcmSJfXnn3/qrbfeUq1atS767GO3bt30wgsvaOTIkWrbtq2qVaum+vXra/DgwTpy5IiioqI0c+ZMr74LxCWv+83lmWee0YwZM9SyZUv169dPUVFRmjZtmnbu3Kk5c+Zkul0qKipKjRs3Vvfu3XXgwAGNHTtW5cuX14MPPmjV6dWrl2bPnq3bb79dnTt31h9//KGPPvrogtOmR0REWM+LJCcnq0SJEvruu+88nq2vU6eOJOm///2v7rnnHgUEBKh169Yev6w0u/uYG5588kl16tRJU6dOVZ8+fXTnnXdq7ty5ateunVq1aqWdO3dq0qRJqlq1qtt3w4SEhKhq1ar65JNPVLFiRUVFRal69eoen9W59tpr1bVrV02ePNm6ffOnn37StGnT1LZtW4/fK5YdAQEBGjlypLp3764mTZro3nvvtaYAL1OmjB5//PELttGkSRM99NBDGjFihDZu3KjmzZsrICBA27dv16xZszRu3Dh17NhRERERGjNmjHr16qXrr79e9913nwoVKqRffvlFJ0+e1LRp01S5cmWVK1dOgwYN0l9//aWIiAjNmTMn0y1w27Zts/5mVa1aVf7+/vrss8904MAB66sCpLRjauLEiXrppZdUvnx5RUdHn/cLSu+66y7997//VWJiotutYrfffrt27Nihp556SitWrNCKFSusZTExMbrtttusz6NGjVKbNm3UvHlz3XPPPdq8ebPGjx+vXr16uf19atiwoWrXrq26desqMjJS69ev1/vvv6+4uDjre9ZcfvjhB+uEzaFDh3TixAkrybjpppvcrlR7cv/99+unn35Sjx49tHXrVrfvRgoPD1fbtm2tzy+//LIaNmyoJk2aqHfv3tq7d6/eeOMNNW/e3C15u/vuuxUSEqKGDRsqOjpaW7Zs0eTJkxUaGqpXX33Vqrd+/Xrde++9uvfee1W+fHmdOnVKn332mVauXKnevXvruuuuc4t13bp1OnLkiO66667z7hOQr+X9hHoAXD766CNTv359ExYWZoKCgkzlypXNsGHD3KaVNubcFMizZs3K1IZreuNly5aZ3r17m0KFCpnw8HBz//33m8OHD7vVXblypalfv74JCQkxxYsXN0899ZRZsGCBx+mwq1Wrlmlb3k5x7dKoUSOPUx8bY8zs2bNN8+bNTXR0tAkMDDSlSpUyDz30kNm3b98F25Vk+vbt63HZ0KFD3fbnjz/+MM2aNTNBQUEmJibGPPvss2bhwoVe77Mx3vdbdqYAz2pbdn/88Yfp2LGjKViwoAkODjb16tUz8+fPd6vjOjZmzJhhBg8ebKKjo01ISIhp1aqVNdWy3RtvvGFKlChhgoKCTKNGjczatWu9mgJ87969pl27dqZgwYImMjLSdOrUyfz9998ep8EePny4KVGihHE6nW7TgXuagjw7+5jx+PcUpyeu35Gff/4507KUlBRTrlw5U65cOXP27FmTmppqXnnlFVO6dGkTFBRkateubebPn+/x3/bHH380derUMYGBgW79kHEKcGOMSU5ONsOGDTNly5Y1AQEBJi4uzgwePDjT77onF/rKAJdPPvnE1K5d2wQFBZmoqChz//33m71797rV6dq1qwkLC8uyjcmTJ5s6deqYkJAQU6BAAVOjRg3z1FNPmb///tut3rx580zDhg1NSEiIiYiIMPXq1TMzZsywlm/ZssU0a9bMhIeHmyJFipgHH3zQ/PLLL27/Xv/884/p27evqVy5sgkLCzORkZHmhhtuMJ9++qnbtvbv329atWplChQoYCRdcOrsAwcOGH9/f/Phhx+6lcvDNOqul6c2P/vsM1OrVi0TFBRkSpYsaZ577jm3r1kwxpj//ve/platWiYyMtIEBASYUqVKmYcfftjs378/U3tZTeXu6XfIk9KlS2e5vqe/O8uXLzcNGzY0wcHBpmjRoqZv375uXxNgTNo0+vXq1TNRUVHG39/fFCtWzHTp0sVs377drd6OHTtMp06dTJkyZUxwcLAJDQ01derUMZMmTXKb+t3l6aefNqVKlfK4DLhcOIzJ5dOhAIBcs3TpUt18882aNWuW221AwNWsZ8+e2rZtm5YvX+7rUK46Z86cUZkyZfTM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uHBhr+sDAAAAQH6S7Ykb7L766istXbpUKSkpatSokTp06JBTcQEAAACAT1z0FODPP/+8nnrqKTkcDhlj9Pjjj+uxxx7LydgAAAAAIM959UySJK1du1Z169a1PlesWFG//PKLQkJCJEm//PKLmjZtqn///Td3Ir1IPJMEAAAAQPI+N/D6SlKfPn00YMAAnTx5UpJ0zTXX6I033lB8fLw2bdqkiRMnqmLFipceOQAAAAD4kNdJ0po1a1SsWDFdd911+vLLL/X+++9rw4YNatiwoW688Ubt3btX06dPz81YAQAAACDXeX27ncuOHTv08MMPKywsTOPHj1fx4sVzK7Ycwe12AAAAAKRcuN3O5ZprrtGCBQvUrl073XTTTXr77bcvKdC//vpLXbp0UeHChRUSEqIaNWpo7dq11nJjjF544QUVK1ZMISEhatasmbZv335J2wQAAACArHidJB09elRPPfWUWrdureeee07t2rXTmjVr9PPPP6t+/fratGlTtjf+77//qlGjRgoICNA333yjLVu26I033lChQoWsOq+99prefPNNTZo0SWvWrFFYWJhatGih06dPZ3t7AAAAAHAhXt9ud9ddd+no0aO69957tWjRIgUHB+vDDz+UJC1atEiPPfaYWrdurZEjR3q98WeeeUYrV67U8uXLPS43xqh48eJ64oknNGjQIElSQkKCYmJiNHXqVN1zzz0X3Aa32wEAAACQcuF2u8WLF+u9995Tnz59NHPmTK1YscJaduutt2r9+vXy8/PLVpDz5s1T3bp11alTJ0VHR6t27dr6v//7P2v5zp07tX//fjVr1swqi4yM1A033KBVq1Z5bPPMmTNKTEx0ewEAAACAt7xOkipUqKDJkydr27ZtmjRpkkqXLu22PDg4WK+88kq2Nr5jxw5NnDhRFSpU0IIFC/Twww+rX79+mjZtmiRp//79kqSYmBi39WJiYqxlGY0YMUKRkZHWKy4uLlsxAQAAALi6eZ0kvf/++1q8eLFq166t6dOna+LEiZe88dTUVF133XV65ZVXVLt2bfXu3VsPPvigJk2adNFtDh48WAkJCdZrz549lxwnAAAAgKuHv7cVa9Wq5TbrXE4oVqyYqlat6lZWpUoVzZkzR5IUGxsrSTpw4ICKFStm1Tlw4IBq1arlsc2goCAFBQXlaJwAAAAArh5eXUnK5lcpea1R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JCRkKj969GimWcrCwsKyHc+uXbt055136uGHH9bLL7+sqKgorVixQj179lRSUpJCQ0MlSQEBAW7rORwOr24d/OSTT1S1alUVLlw4xydrcDrTrkvY40hOTj7vOqNGjdK4ceM0duxY6zmsAQMGKCkpKUdjc/HUb6mpqeddJywsTOXLl5ckvf/++7r22mv13nvvqWfPnj7Zh5zkdZL077//WrPXhYSEKDQ0VNWrV8+1wAAAAJA2WM2t295yUqVKlfTdd99lKl+/fr0qVqzoVRurV6/O9LlKlSqS0p5LSU1N1RtvvGElHZ9++uklRn1OXFyc2xUolypVqmjlypVuZStXrlTFihXl53cukTxf7EWLFpUk7du3T7Vr15Ykt0kcPFm5cqXuuusua2bp1NRUbdu2TVWrVrXqBAYGXvBKirfxXyqn06lnn31WAwcO1H333aeQkJDLbh/ssjVxw5YtW/S///1P//vf/2SMUXx8vPXZ9QIAAMDV5+GHH9a2bdvUr18//e9//1N8fLxGjx6tGTNm6IknnvCqjZUrV+q1117Ttm3b9Pbbb2vWrFnq37+/JKl8+fJKTk7WW2+9pR07dujDDz/UpEmTcnOXJElPPPGEFi1apOHDh2vbtm2aNm2axo8fn2kyiPPFHhISovr16+vVV1/V1q1btWzZMj333HPn3W6FChW0cOFC/fjjj9q6daseeughHThwwK1OmTJltGbNGu3atUv//POPxys/3safEzp16iQ/Pz9rZr/LcR8sxksOh8M4nU7jcDgyvVzlTqfT2+byTEJCgpFkEhISfB0KAADAeZ06dcps2bLFnDp1ytehXJSffvrJ3HbbbaZo0aImMjLS3HDDDeazzz5zq9O1a1dz1113ZVq3dOnSZtiwYaZTp04mNDTUxMbGmnHjxrnVGT16tClWrJgJCQkxLVq0MB988IGRZP79919jjDFTpkwxkZGRbut89tln5nxD3p07dxpJZsOGDVnWmT17tqlataoJCAgwpUqVMqNGjcp27Fu2bDENGjQwISEhplatWua7774zksySJUuMMcYsWbLEbV8OHz5s7rrrLhMeHm6io6PNc889Zx544AG3vouPjzf169c3ISEhRpLZuXNnpna8jX/MmDFuZddee60ZMmRIln2S1b/jiBEjTNGiRc3x48fzdB/szvd75G1u4DDGu/kd//zzT6+SrtKlS2c/U8tFiYmJioyMVEJCgiIiInwdDgAAQJZOnz6tnTt3qmzZsgoODvZ1OPBSmTJlNGDAALfZ9+A75/s98jY38PoG1/yW/AAAAABAbsjWM0k5bejQoda367pelStXtpafPn1affv2VeHChRUeHq4OHTpkuo8RAAAAAHKSz6dKqVatmr7//nvrs7//uZAef/xxffXVV5o1a5YiIyP16KOPqn379plmtwAAAAB8ZdeuXb4OATnM50mSv7+/x2/YTUhI0Hvvvafp06frlltukSRNmTJFVapU0erVq1W/fv28DhUAAADAVcCnt9tJ0vbt21W8eHFdc801uv/++61v4F23bp2Sk5PVrFkzq27lypVVqlQprVq1Ksv2zpw5o8TERLcXAAAAAHjLp0nSDTfcoKlTp+rbb7/VxIkTtXPnTt144406duyY9u/fr8DAwEzfeBwTE6P9+/dn2eaIESMUGRlpveLi4nJ5LwAAAABcSbKdJB04cED/+c9/VLx4cfn7+8vPz8/tlR0tW7ZUp06dVLNmTbVo0UJff/21jh49eknfnjx48GAlJCRYrz179lx0WwAAAACuPtl+Jqlbt27avXu3nn/+eRUrVkwOhyPHgilYsKAqVqyo33//XbfddpuSkpJ09OhRt6tJBw4c8PgMk0tQUJCCgoJyLCYAAAAAV5dsJ0krVqzQ8uXLVatWrRwP5vjx4/rjjz/0n//8R3Xq1FFAQIAWLVqkDh06SJLi4+O1e/duNWjQIMe3DQAAAADSRdxuFxcXJ2NMjmx80KBBWrZsmXbt2qUff/xR7dq1k5+fn+69915FRkaqZ8+eGjhwoJYsWaJ169ape/fuatCgATPbAQAAwE23bt3Utm1bX4dxQVOnTs30zL0v2/Gl/LwP2U6Sxo4dq2eeeSZH5oPfu3ev7r33XlWqVEmdO3dW4cKFtXr1ahUtWlSSNGbMGN15553q0KGDbrrpJsXGxmru3LmXvF0AAADkrG7dusnhcMjhcCggIEBly5bVU089pdOnT/s6NEnS0qVLrfgcDodiYmLUoUMH7dixw9ehXVCZMmU0duxYt7K7775b27Zty/VtN23a1Oqz4OBgVaxYUSNGjMj2RRNf7sPFyPbtdnfffbdOnjypcuXKKTQ0VAEBAW7Ljxw54nVbM2fOPO/y4OBgvf3223r77bezGyYAAADy2O23364pU6YoOTlZ69atU9euXeVwODRy5MiLbjM5OTnTePNSxMfHq0CBAtq+fbt69+6t1q1b63//+1+2JyDztZCQEIWEhOTJth588EG9+OKLOnPmjBYvXqzevXurYMGCevjhhy+p3bzch+y6qCtJkydP1vvvv6/x48drzJgxbi8AAABcnYKCghQbG6u4uDi1bdtWzZo108KFC63lnq4m1KpVS0OHDrU+OxwOTZw4UW3atFFYWJhefvllpaSkqGfPnipbtqxCQkJUqVIljRs37qJijI6OVrFixXTTTTfphRde0JYtW/T7779LkiZOnKhy5copMDBQlSpV0ocffui2riu2li1bKiQkRNdcc41mz55tLXddrTp69KhVtnHjRjkcjizvwvrjjz901113KSYmRuHh4br++uv1/fffW8ubNm2qP//8U48//rh1RUfyfKuaN/G/++67ateunUJDQ1WhQgXNmzfvgn0WGhqq2NhYlS5dWt27d1fNmjXd/l3zch/ySravJHXt2jU34gAAAIAnxkjJJ/N+uwGh0iXMYrx582b9+OOPKl26dLbXHTp0qF599VWNHTtW/v7+Sk1NVcmSJTVr1iwVLlxYP/74o3r37q1ixYqpc+fOFx2j6ypGUlKSPvvsM/Xv319jx45Vs2bNNH/+fHXv3l0lS5bUzTffbK3z/PPP69VXX9W4ceP04Ycf6p577tGmTZtUpUqVi4rh+PHjuuOOO/Tyyy8rKChIH3zwgVq3bq34+HiVKlVKc+fO1bXXXqvevXvrwQcfzLIdb+MfNmyYXnvtNY0aNUpvvfWW7r//fv3555+Kioq6YKzGGK1YsUK//fabKlSo4LN9yAvZTpIkKSUlRZ9//rm2bt0qSapWrZratGlz2V2mBAAAyPeST0qvFM/77T77txQYlq1V5s+fr/DwcJ09e1ZnzpyR0+nU+PHjs73p++67T927d3crGzZsmPW+bNmyWrVqlT799NOLTpL27dun119/XSVKlFClSpXUp08fdevWTY888ogkaeDAgVq9erVef/11twF6p06d1KtXL0nS8OHDtXDhQr311luaMGHCRcVx7bXX6tprr7U+Dx8+XJ999pnmzZunRx99VFFRUfLz81OBAgXO+zU4r7/+ulfxd+vWTffee68k6ZVXXtGbb76pn376SbfffnuWbU+YMEHvvvuukpKSlJycrODgYPXr189n+5AXsn273e+//64qVarogQce0Ny5czV37lx16dJF1apV0x9//JEbMQIAAOAycPPNN2vjxo1as2aNunbtqu7du1tf5ZIddevWzVT29ttvq06dOipatKjCw8M1efJk7d69O9ttlyxZUmFhYSpevLhOnDihOXPmKDAwUFu3blWjRo3c6jZq1Mi6KOCS8atoGjRokKlOdhw/flyDBg1SlSpVVLBgQYWHh2vr1q3Z3jdv469Zs6b1PiwsTBERETp48OB5277//vu1ceNGrVy5Ui1bttR///tfNWzY0Gf7kBeyfSWpX79+KleunFavXm1dljt8+LC6dOmifv366auvvsrxIAEAAK5aAaFpV3V8sd1sCgsLU/ny5SVJ77//vq699lq999576tmzpyTJ6XRmmhUtOTnZYzt2M2fO1KBBg/TGG2+oQYMGKlCggEaNGqU1a9ZkO8bly5crIiJC0dHRKlCgQLbXPx+nM+36g30fPe2f3aBBg7Rw4UK9/vrrKl++vEJCQtSxY0clJSXlaGwuGSfBcDgcSk1NPe86kZGR1r/rp59+qvLly6t+/fpq1qyZT/YhL2T7StKyZcv02muvud23WLhwYb366qtatmxZjgYHAABw1XM40m57y+vXJTyPJKUlDM8++6yee+45nTp1SpJUtGhR7du3z6qTmJionTt3XrCtlStXqmHDhnrkkUdUu3ZtlS9f/qLvYCpbtqzKlSuXKUGqUqWKVq5cmWm7VatWdStbvXp1ps+u55FcX2Nj38eNGzeeN56VK1eqW7duateunWrUqKHY2NhMkzwEBgYqJSXlvO14G/+lCg8PV//+/TVo0CArGbzc9sEb2U6SgoKCdOzYsUzlx48fV2BgYI4EBQAAgMtfp06d5OfnZ32dyy233KIPP/xQy5cv16ZNm9S1a1evnmmvUKGC1q5dqwULFmjbtm16/vnn9fPPP+dorE8++aSmTp2qiRMnavv27Ro9erTmzp2rQYMGudWbNWuW3n//fW3btk1DhgzRTz/9pEcffVSSVL58ecXFxWno0KHavn27vvrqK73xxhsX3Le5c+dq48aN+uWXX3TfffdlurJTpkwZ/fDDD/rrr7/0zz//XFL8OeGhhx7Stm3bNGfOnMt2Hy4k20nSnXfeqd69e2vNmjUyxsgYo9WrV6tPnz5q06ZNbsQIAACAy5C/v78effRRvfbaazpx4oQGDx6sJk2a6M4771SrVq3Utm1blStX7oLtPPTQQ2rfvr3uvvtu3XDDDTp8+LD1cH9Oadu2rcaNG6fXX39d1apV0zvvvKMpU6aoadOmbvWGDRummTNnqmbNmvrggw80Y8YM60pHQECAZsyYod9++001a9bUyJEj9dJLL513u6NHj1ahQoXUsGFDtW7dWi1atNB1113nVufFF1/Url27VK5cOetq1cXGnxOioqL0wAMPaOjQoUpNTb0s9+FCHCabX5d79OhRde3aVV9++aV1T+PZs2fVpk0bTZ06VZGRkbkS6MVKTExUZGSkEhISFBER4etwAAAAsnT69Gnt3LlTZcuWVXBwsK/DQQYOh0OfffaZ2rZt6+tQcB7n+z3yNjfI9sQNBQsW1BdffKHt27frt99+k5R2/6DrYS4AAAAAuJxd1PckSWn3Htq/RAoAAAAArgReJUkDBw7U8OHDFRYWpoEDB5637ujRo3MkMAAAACA/yeZTKriMeZUkbdiwwZrjfcOGDbkaEAAAAAD4kldJ0pIlSzy+BwAAQM7jigVw8XLi9yfbU4D36NHD4/cknThxQj169LjkgAAAAK5WrpmDT5486eNIgMuX6/fH9ft0MbI9Bbifn5/27dun6Ohot/J//vlHsbGxOnv27EUHkxuYAhwAAFxO9u3bp6NHjyo6OlqhoaFyOBy+Dgm4LBhjdPLkSR08eFAFCxZUsWLFMtXJ8SnAExMTrS+PPXbsmNuc4ykpKfr6668zJU4AAADIntjYWEnSwYMHfRwJcHkqWLCg9Xt0sbxOkgoWLCiHwyGHw6GKFStmWu5wODRs2LBLCgYAAOBq53A4VKxYMUVHR1sTZwHwTkBAgPz8/C65Ha+TpCVLlsgYo1tuuUVz5sxRVFSUtSwwMFClS5dW8eLFLzkgAAAApD3ikBODPQDZ53WS1KRJE0nSzp07FRcXJ6cz23M+AAAAAEC+53WS5FK6dGlJabNG7N69W0lJSW7La9asmTORAQAAAIAPZDtJOnTokLp3765vvvnG4/KUlJRLDgoAAAAAfCXb98wNGDBAR48e1Zo1axQSEqJvv/1W06ZNU4UKFTRv3rzciBEAAAAA8ky2ryQtXrxYX3zxherWrSun06nSpUvrtttuU0REhEaMGKFWrVrlRpwAAAAAkCeyfSXpxIkT1vchFSpUSIcOHZIk1ahRQ+vXr8/Z6AAAAAAgj2U7SapUqZLi4+MlSddee63eeecd/fXXX5o0aZLHb7UFAAAAgMtJtm+369+/v/bt2ydJGjJkiG6//XZ9/PHHCgwM1NSpU3M6PgAAAADIUw5jjLmUBk6ePKnffvtNpUqVUpEiRXIqrhyTmJioyMhIJSQkKCIiwtfhAAAAAPARb3ODbF9Jyig0NFTXXXfdpTYDAAAAAPmCV0nSwIEDvW5w9OjRFx0MAAAAAPiaV0nShg0bvGrM4XBcUjAAAAAA4GteJUlLlizJ7TgAAAAAIF/I9hTgAAAAAHAly/bEDTfffPN5b6tbvHjxJQUEAAAAAL6U7SSpVq1abp+Tk5O1ceNGbd68WV27ds2puAAAAADAJ7KdJI0ZM8Zj+dChQ3X8+PFLDggAAAAAfCnHnknq0qWL3n///ZxqDgAAAAB8IseSpFWrVik4ODinmgMAAAAAn8j27Xbt27d3+2yM0b59+7R27Vo9//zzORYYAAAAAPhCtpOkyMhIt89Op1OVKlXSiy++qObNm+dYYAAAAADgC9lOkqZMmZIbcQAAAABAvpDtJMll7dq12rp1qySpatWqqlOnTo4FBQAAAAC+ku2JG/bu3asbb7xR9erVU//+/dW/f39df/31aty4sfbu3XvRgbz66qtyOBwaMGCAVXb69Gn17dtXhQsXVnh4uDp06KADBw5c9DYAAAAA4EKynST16tVLycnJ2rp1q44cOaIjR45o69atSk1NVa9evS4qiJ9//lnvvPOOatas6Vb++OOP68svv9SsWbO0bNky/f3335kmjgAAAACAnJTtJGnZsmWaOHGiKlWqZJVVqlRJb731ln744YdsB3D8+HHdf//9+r//+z8VKlTIKk9ISNB7772n0aNH65ZbblGdOnU0ZcoU/fjjj1q9enW2twMAAAAA3sh2khQXF6fk5ORM5SkpKSpevHi2A+jbt69atWqlZs2auZWvW7dOycnJbuWVK1dWqVKltGrVqizbO3PmjBITE91eAAAAAOCtbCdJo0aN0mOPPaa1a9daZWvXrlX//v31+uuvZ6utmTNnav369RoxYkSmZfv371dgYKAKFizoVh4TE6P9+/dn2eaIESMUGRlpveLi4rIVEwAAAICrW7Znt+vWrZtOnjypG264Qf7+aaufPXtW/v7+6tGjh3r06GHVPXLkSJbt7NmzR/3799fChQsVHBx8EaF7NnjwYA0cOND6nJiYSKIEAAAAwGvZTpLGjh2bIxtet26dDh48qOuuu84qS0lJ0Q8//KDx48drwYIFSkpK0tGjR92uJh04cECxsbFZthsUFKSgoKAciREAAADA1SfbSVLXrl1zZMO33nqrNm3a5FbWvXt3Va5cWU8//bTi4uIUEBCgRYsWqUOHDpKk+Ph47d69Ww0aNMiRGAAAAAAgo4v6MtmUlBR9/vnn1pfJVqtWTW3atJGfn5/XbRQoUEDVq1d3KwsLC1PhwoWt8p49e2rgwIGKiopSRESEHnvsMTVo0ED169e/mLABAAAA4IKynST9/vvvuuOOO/TXX39Z04CPGDFCcXFx+uqrr1SuXLkcC27MmDFyOp3q0KGDzpw5oxYtWmjChAk51j4AAAAAZOQwxpjsrHDHHXfIGKOPP/5YUVFRkqTDhw+rS5cucjqd+uqrr3Il0IuVmJioyMhIJSQkKCIiwtfhAAAAAPARb3ODbF9JWrZsmVavXm0lSJJUuHBhvfrqq2rUqNHFRQsAAAAA+US2vycpKChIx44dy1R+/PhxBQYG5khQAAAAAOAr2U6S7rzzTvXu3Vtr1qyRMUbGGK1evVp9+vRRmzZtciNGAAAAAMgz2U6S3nzzTZUrV04NGjRQcHCwgoOD1ahRI5UvX17jxo3LjRgBAAAAIM9k+5mkggUL6osvvtDvv/9uTQFepUoVlS9fPseDAwAAAIC85nWSlJqaqlGjRmnevHlKSkrSrbfeqiFDhigkJCQ34wMAAACAPOX17XYvv/yynn32WYWHh6tEiRIaN26c+vbtm5uxAQAAAECe8zpJ+uCDDzRhwgQtWLBAn3/+ub788kt9/PHHSk1Nzc34AAAAACBPeZ0k7d69W3fccYf1uVmzZnI4HPr7779zJTAAAAAA8AWvk6SzZ88qODjYrSwgIEDJyck5HhQAAAAA+IrXEzcYY9StWzcFBQVZZadPn1afPn0UFhZmlc2dOzdnIwQAAACAPOR1ktS1a9dMZV26dMnRYAAAAADA17xOkqZMmZKbcQAAAABAvuD1M0kAAAAAcDUgSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG5IkAAAAALAhSQIAAAAAG58mSRMnTlTNmjUVERGhiIgINWjQQN988421/PTp0+rbt68KFy6s8PBwdejQQQcOHPBhxAAAAACudD5NkkqWLKlXX31V69at09q1a3XLLbforrvu0q+//ipJevzxx/Xll19q1qxZWrZsmf7++2+1b9/elyEDAAAAuMI5jDHG10HYRUVFadSoUerYsaOKFi2q6dOnq2PHjpKk3377TVWqVNGqVatUv359r9pLTExUZGSkEhISFBERkZuhAwAAAMjHvM0N8s0zSSkpKZo5c6ZOnDihBg0aaN26dUpOTlazZs2sOpUrV1apUqW0atWqLNs5c+aMEhMT3V4AAAAA4C2fJ0mbNm1SeHi4goKC1KdPH3322WeqWrWq9u/fr8DAQBUsWNCtfkxMjPbv359leyNGjFBkZKT1iouLy+U9AAAAAHAl8XmSVKlSJW3cuFFr1qzRww8/rK5du2rLli0X3d7gwYOVkJBgvfbs2ZOD0QIAAAC40vn7OoDAwECVL19eklSnTh39/PPPGjdunO6++24lJSXp6NGjbleTDhw4oNjY2CzbCwoKUlBQUG6HDQAAAOAK5fMrSRmlpqbqzJkzqlOnjgICArRo0SJrWXx8vHbv3q0GDRr4MEIAAAAAVzKfXkkaPHiwWrZsqVKlSunYsWOaPn26li5dqgULFigyMlI9e/bUwIEDFRUVpYiICD322GNq0KCB1zPbAQAAAEB2+TRJOnjwoB544AHt27dPkZGRqlmzphYsWKDbbrtNkjRmzBg5nU516NBBZ86cUYsWLTRhwgRfhgwAAADgCpfvvicpp/E9SQAAAACky/B7kgAAAAAgPyBJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbnyZJI0aM0PXXX68CBQooOjpabdu2VXx8vFud06dPq2/fvipcuLDCw8PVoUMHHThwwEcRAwAAALjS+TRJWrZsmfr27avVq1dr4cKFSk5OVvPmzXXixAmrzuOPP64vv/xSs2bN0rJly/T333+rffv2PowaAAAAwJXMYYwxvg7C5dChQ4qOjtayZct00003KSEhQUWLFtX06dPVsWNHSdJvv/2mKlWqaNWqVapfv/4F20xMTFRkZKQSEhIUERGR27sAAAAAIJ/yNjfIV88kJSQkSJKioqIkSevWrVNycrKaNWtm1alcubJKlSqlVatWeWzjzJkzSkxMdHsBAAAAgLfyTZKUmpqqAQMGqFGjRqpevbokaf/+/QoMDFTBggXd6sbExGj//v0e2xkxYoQiIyOtV1xcXG6HDgAAAOAKkm+SpL59+2rz5s2aOXPmJbUzePBgJSQkWK89e/bkUIQAAAAArgb+vg5Akh599FHNnz9fP/zwg0qWLGmVx8bGKikpSUePHnW7mnTgwAHFxsZ6bCsoKEhBQUG5HTIAAACAK5RPryQZY/Too4/qs88+0+LFi1W2bFm35XXq1FFAQIAWLVpklcXHx2v37t1q0KBBXocLAAAA4Crg0ytJffv21fTp0/XFF1+oQIEC1nNGkZGRCgkJUWRkpHr27KmBAwcqKipKEREReuyxx9SgQQOvZrYDAAAAgOzy6RTgDofDY/mUKVPUrVs3SWlfJvvEE09oxowZOnPmjFq0aKEJEyZkebtdRkwBDgAAAEDyPjfIV9+TlBvyTZKUkiItXy7t2ycVKybdeKPk5+e7eAAAAICrjLe5Qb6YuOGKN3eu1L+/tHfvubKSJaVx46T27X0XF+AtknwAAHAVyTdTgF+x5s6VOnZ0T5Ak6a+/0srnzvVNXIC35s6VypSRbr5Zuu++tJ9lynDs4vKRkiItXSrNmJH2MyXF1xEBAPI5brfLTSkpaYPJjAmSXWS49GxPyT9AcjrTzs47019+znM/ZVvm8afTtr5/2k9rub/kcKT9dDrTfrrV88+wrm19P/9zL4fT/bNrm7hyuZL8jH8mXM8Tzp7N1VDkb1zJx5WAq/lAjuGZpHQ+TZKWLk07636lc+jcNUmH0gbQDp17OdM/K32Z017HYatjL7PXc2Rebn22vXdtx+F0L3M6s1jHeW65/bPDVuZ0ppc7M7RlXyfjy5Hhs1/mz44MdaxE10NdP1u5K/F1ONwTZfsyq8xVx/9c+/bk2OFwT6gzJtGpRmrZUTpwMIt/d0faf9brV0uBQZkTaVdbJNLwFZJ8XAlI9HG5y2dJPklSOp8mSTNmpN2edCHFw6TwQMko7T9zY9IGqPafbssy1lOGOspQTxmWZfU5F/oAkM4lyU7b+4zJtNtnT++z+OlMr2hPqu3JtOSeIGdMul3JrrWOU5kSarkSble5PWmW5wRb9kTYvsyetHtIrOWwJbmucr8MCbo9ebeVu5Jh1zI/W0JtbceWMMvhIal2JfKuJD29DStBz5iQ25Jte+LtlpQ7bevZrly7EnKHM/N6WV29tr8/nwtdyXc40gaaO3dyRh75F4k+Lnf5MMknSUp3WVxJWrJEato0t6PxTmpq2ivlrOeXSU0bfKSkpH1OPXvufUpK+vq2Mqut9HVSz6b9sXe9d61j1U9JS/xSXfVTbO2mvzfpyzMtS//p2odU2+eUDOVWGx7qpqamJZiZlqem7b+VwLrKjW2Z/bMribWV2T9nSojtbXta7qHMSojty3TuvdtyKVMSLVuZVSf9lWKrA+RXjoyv9OTXGCnZi/XD/aQApzIn3q6fWSTgHq9s25dluLptT8IdOpfk2ZN0twTbU9J9nkTckXG5fTsZEvbzJeNypCe1tjIrboctic6wPKuE3K0sQ32nX1rfOjMk4B6Tcnvi7+nqesbkOovE3Eq8Pb13tZnhFvPsJOc5iUQfl7t8muSTJKXLF88k/fVX5gNE4g8c8jdvk/z5X0iNGnpOpDMmzdayDO9dSab12Zxbz9jeW0l8epJsbO/dkmtX0pqePFv10stcSXKKLWG2tuUp2U51X+Z670rMZU+a5b6+fZkrYXVrL8Nnk5qetLrWkXuibf9sT8St5NdDEq6MybZsibSnMtnWy1Ce8Wdq+t+2rBJvyfMVbCm97Ys/RAGfyZSc69zAL2PCbl/mtL+31c901VtSUqp0JOnCsRQPk0IDPCfxGRNsKYtEPWMinuFzxlvW7Ymz60SAlfBnXC9jWcYkP2PirgzLMiTvVpsZrqS72rQn7Jmu4LuScKd7Xbdb5zMk/m5X/DMk826Jvb/tpIB9mf2qvr/7Mmf6VXSHziXhVr0Mib1190GGZU6H56TeuqPA333/8ko+TvKZAjw/8PNLu5zYsWPawWBPlFx/rMaOJUFC/nTjjWl/wC6U5N/eimMYl85+Bdv+3tivbNuvDGdItDMm5T+vl/oMvPB2RzwrVasoySjzVWtXwmxLpJV6Lrm2kvUMiXZKeuLsSqJdZRkTbSuhtyfKGcpSbWVWwi0PZbYr1Z6ScVfibWz17FexPSbfGeplupLt4b09IXdLtrNItF2JtKdbyz0l5R5vIbcn3rb3WSXmrmWXwtV2psLzfc4lf5/Im+3gyuCw/bS/ZEvqreUeEn1P5dY6tkQ9OVU6ep7L+cZIe/akPavUtGmO7V5OIknKbe3bp11O9HQ/5tix3EuM/IskH3nJ6ZScgVJAYM60d21j6aXRF07yn3yRY/hqlfH2cldCnqksi+Tcfju5deX6rO0qsIer4/bbzVMzJNop9uUp0q/bpJffvvB+PHa/VC5O5275Tk+e7VfK7Yl6xjJ7XfsV7YzJulwJu8mQoBv39/Zlnm4rz5hc2xN3K5nPIjF3/cx4ddz+2fVv62pL8rCeMmxDHt6fr8y2zNW+/WfGhN51VV628kz1bXXtSXhOJfYuJsPPTAsuVJbD9u3L/W1cJG63yyv5bGYPwGueHrqMiyPJR/7nuh9e8pzk89A78jNu2YcnruTc9dOe3Lsl+vZb0l2Jrys5P+thmS3xNzrXliuBtyf61hVxVxu2xNu1bPNv0rBxF94fHzyXzzNJ6fJNkgRczkjycbkiycfljEQfl6t8nOSTJKUjSQKAqxxJPi5nJPq4XOXTJJ8kKR1JEgAAuKyR6ONylQ+TfJKkdCRJAAAAgI/ksySfKcABAAAA+JafX76d5vt88vBbpQAAAAAg/yNJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbkiQAAAAAsCFJAgAAAAAbf18HkNuMMZKkxMREH0cCAAAAwJdcOYErR8jKFZ8kHTt2TJIUFxfn40gAAAAA5AfHjh1TZGRklssd5kJp1GUuNTVVf//9twoUKCCHw+HTWBITExUXF6c9e/YoIiLCp7Fciejf3EX/5i76N3fRv7mL/s199HHuon9zV37qX2OMjh07puLFi8vpzPrJoyv+SpLT6VTJkiV9HYabiIgInx8gVzL6N3fRv7mL/s1d9G/uon9zH32cu+jf3JVf+vd8V5BcmLgBAAAAAGxIkgAAAADAhiQpDwUFBWnIkCEKCgrydShXJPo3d9G/uYv+zV30b+6if3MffZy76N/cdTn27xU/cQMAAAAAZAdXkgAAAADAhiQJAAAAAGxIkgAAAADAhiQJAAAAAGxIkjwYMWKErr/+ehUoUEDR0dFq27at4uPj3eqcPn1affv2VeHChRUeHq4OHTrowIEDbnUcDkem18yZM63l+/bt03333aeKFSvK6XRqwIABXsW3e/dutWrVSqGhoYqOjtaTTz6ps2fPXvJ+55X83r8Xaje/y6v+nTt3rm677TYVLVpUERERatCggRYsWHDB+P73v//pxhtvVHBwsOLi4vTaa6/lzI7nkfzcv7t27fLY7urVq3OuA3JZXvXvihUr1KhRIxUuXFghISGqXLmyxowZc8H4OH7T5Eb/cvyek53/h1auXCl/f3/VqlXrgvFd7sevlL/7mGP4nAv179KlSz3W2b9//3njy9Nj2CCTFi1amClTppjNmzebjRs3mjvuuMOUKlXKHD9+3KrTp08fExcXZxYtWmTWrl1r6tevbxo2bOjWjiQzZcoUs2/fPut16tQpa/nOnTtNv379zLRp00ytWrVM//79Lxjb2bNnTfXq1U2zZs3Mhg0bzNdff22KFCliBg8enGP7n9vyc/96025+l1f9279/fzNy5Ejz008/mW3btpnBgwebgIAAs379+ixjS0hIMDExMeb+++83mzdvNjNmzDAhISHmnXfeyfmOyCX5uX937txpJJnvv//erd2kpKSc74hcklf9u379ejN9+nSzefNms3PnTvPhhx+a0NDQ8x6LHL/n5Eb/cvye4+3/Q//++6+55pprTPPmzc2111573tiuhOPXmPzdxxzD51yof5csWWIkmfj4eLc6KSkpWcaW18cwSZIXDh48aCSZZcuWGWOMOXr0qAkICDCzZs2y6mzdutVIMqtWrbLKJJnPPvvMq200adLEq0H8119/bZxOp9m/f79VNnHiRBMREWHOnDnj3Q7lM/mp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"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": "'Code executed successfully.'"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Prompt = \"\"\"\n",
    "请你根据当前的分析情况，对未来的人口进行预测，基于刚才你分析的数据，预测未来的数据并画图。\n",
    "你应该预测2051到2055年美国的乡村和城镇人口分布比例，将预测的数据使用使用Python语言绘制，你至少应该绘制10个数据点，并且，增长率是会发生变动的，最后，你要把这些数据点连接来，成为一个图表。\n",
    "你应该使用markdown进行输出，只输出Python的执行代码。\n",
    "\"\"\"\n",
    "add_message(\"user\", request_data, Prompt)\n",
    "response = client.chat.completions.create(\n",
    "    model=\"glm-4\",\n",
    "    messages=request_data,\n",
    "    top_p=0.1,\n",
    "    temperature=0.1,\n",
    "    max_tokens=2000,\n",
    ")\n",
    "execute_cleaned_code_from_string(response.choices[0].message.content)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-23T07:37:40.991563Z",
     "start_time": "2024-01-23T07:37:21.057102Z"
    }
   },
   "id": "78d99df7decc2fdc"
  },
  {
   "cell_type": "markdown",
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "ac423b3b8db0481a"
  },
  {
   "cell_type": "markdown",
   "source": [
    "观察两个模型的结果，我们可以发现\n",
    "1. GLM-4V 模型对于图像的理解较为准确，能够对图像的趋势进行简单的分析，虽然能够绘制出正常的结果，但是建议作为备选方案使用。\n",
    "2. GLM-4 模型对于图像的理解更加精确，通过对表格准确数据的提取，获得精确的数据并绘制了较好的结果。\n",
    "\n",
    "在绘制图像的时候，由于设计代码设计，我在尝试的时候使用较小的`temperature`和`top_p`，这样可以保证模型生成的代码更加准确。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "faddfda5de3512d7"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
